iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
Software Development

30天快速上手Laravel系列 第 15

Day15-[Laravel 資料夾目錄與內容] Controller

  • 分享至 

  • xImage
  •  

基本介紹

Controller 放的是請求處理邏輯。

除了在單一的 routes.php 檔案中定義所有的請求處理邏輯,一般來說其實會用Controller 來組織。

範例

Return api response

<?php

namespace App\Http\Controllers;

use App\Services\ProductService;
use App\Http\Controllers\Controller;

class ProductController extends Controller
{
    protected $productService;

    public function get()
    {
        $data = $this->productService->get();  
        return response()->json($data);
    }
}

return view(視圖)- 前後端在一起的話

public function showProfile($id)
{
    return view('user.profile', ['user' => User::findOrFail($id)]);
}

RESTful 資源控制器

第10天討論Route的時候提到的Resource Route,在laravel 中有定義Resource Controller會有的行為

Actions Handled By Resource Controller

Verb URI Action Route Name
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy

使用方法

step1.
下指令或是自己建立一個Controller,下指令的話七個行為都會一併被建立在Controller裡面(可以視需求拿掉不需要的Action)

  • php artisan make:controller PhotoController --resource

step2.
在Resource 中註冊Controller (會使用關鍵字 resource)

  • Route::resource('photos', 'PhotoController');

可以用only or except 保留需要或沒用到的action

Route::resource('photos', 'PhotoController')->only([
    'index', 'show'
]);

Route::resource('photos', 'PhotoController')->except([
    'create', 'store', 'update', 'destroy'
]);

甚至有提供如果只需要api而不用view的route指令和註冊方法

  • route: Route::apiResource('photos', 'PhotoController');
  • 指令: php artisan make:controller API/PhotoController --api

還有其他像改名字之類的細節,如果需要更詳細的使用方式可參考 Laravel Resource Controllers


結論: 一般如果是遵循restful API的設計方式,使用laravel提供的定義和方法會很方便,大家的定義方式也會比較統一跟直覺,而且他其實可以只選擇需要的方法存在,使用上也很彈性。

參考連結:


上一篇
Day14-[Laravel 資料夾目錄與內容] Service
下一篇
Day16-[Laravel 資料夾目錄與內容] Request
系列文
30天快速上手Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言